home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / h / mips.h < prev    next >
C/C++ Source or Header  |  1991-03-29  |  803b  |  38 lines

  1.  
  2. /* amazingly the only instructions which the mips seems to have for overflow
  3.  is add and sub which signal:
  4.             Integer overflow            SIGTRAP        BRK_OVERFLOW
  5.  on overflow.   Of course that is much too expensive.
  6.  Their div instruction does only  32 by 32 bit divide.
  7. */
  8.  
  9.            
  10.  
  11. #ifdef __GNUC__
  12. /* so have assembler macros */
  13. /*    mulul is a macro:
  14.     f = mulul(a,b,h) <--> h:f  == a*b
  15. */
  16.  
  17. #define mulul(x,y,hiremainder) \
  18. ({ulong __x =(x),__y=(y),__res; \
  19.   asm volatile("multu %2,%3\n\tmflo %0\n\tmfhi %1" \
  20.      :"=r" (__res),"=r" (hiremainder) \
  21.      :"r" (__x),"r"(__y));  \
  22.    __res;})
  23.  
  24.  
  25.   /* add_carry: add X and Y  adding 1 to H if there was overflow
  26.      H is presumed to be small enough not to overflow 
  27.      */
  28.      
  29. #else  /* not gcc */
  30.  
  31.  
  32. #endif
  33.      
  34.  
  35.  
  36.   
  37. #define BASE_COUNTER -1   
  38.